/*
 * FileName:    SimpleDeleteAction.java
 * Description: 共通削除Action
 * History:     2010-10-21 (廖宝俊) 1.0 Create
 */
package com.sn.system.common.action;

import com.sn.system.common.command.BaseConditionInfo;
import com.sn.system.common.command.Page;
import com.sn.system.common.service.IQueryMethodservice;

import org.springframework.dao.DataIntegrityViolationException;

import com.opensymphony.xwork2.ActionSupport;

public class SimpleDeleteAction extends ActionSupport{

	/** データー対象の削除用service */
	private IQueryMethodservice deleteService;

    /** データー対象を削除するのクラス */
	private Class deletedClass;

	/** データー対象を削除するのキー */
	private String[] id;

	/** 検索の条件 */
	private BaseConditionInfo condition;

	/** データー対象を削除した後に戻るのはページデーター */
	private Page page;

	/** ページデーター戻るのフラグ */
	private boolean dataBack=false;

	/** データー対象を削除するキーのクラス */
	private Class idClass;

	/** 提示情報*/
	private String message;

	/**
     * 削除を実施
     */
	public String execute() throws Exception{
		if (id.length > 0) {
			try {

				//削除する前の処理方法
				beforeDelObject();

				if(idClass.equals(java.lang.Integer.class)){
					deleteService.deleteSome(deletedClass, changeIdToInteger());
				}else{
					deleteService.deleteSome(deletedClass, id);
				}

				//削除した後の処理方法
				afterDelObject();

			} catch (DataIntegrityViolationException ex) {
				message="記録してすでに引用しました、削除することができません！";
			}
		}
		if(dataBack){
			dataBack();
		}
		return SUCCESS;
	}

	private Integer[] changeIdToInteger(){
		Integer[] intIds=new Integer[id.length];
		for (int i=0;i<id.length;i++){
			intIds[i]=Integer.parseInt(id[i]);
		}
		return intIds;
	}

	/**
     * データーが戻
     */
	protected void dataBack() {
		//データーが戻る前の処理方法
		beforeDataBack();

		this.page=deleteService.selectQueryList(condition);

		//データーが戻った後の処理方法
		afterDataBack();
	}


	/**
     * 削除する前の処理方法
     */
	protected void beforeDelObject() {

	}
	/**
     * 削除した後の処理方法
     */
	protected void afterDelObject() {

	}

	/**
     * データーが戻る前の処理方法
     */
	protected void beforeDataBack() {

	}
	/**
     * データーが戻った後の処理方法
     */
	protected void afterDataBack() {

	}

	public BaseConditionInfo getCondition() {
		return condition;
	}


	public void setCondition(BaseConditionInfo condition) {
		this.condition = condition;
	}


	public Page getPage() {
		return page;
	}


	public void setPage(Page page) {
		this.page = page;
	}


	public boolean isDataBack() {
		return dataBack;
	}


	public void setDataBack(boolean dataBack) {
		this.dataBack = dataBack;
	}


	public void setDeleteService(IQueryMethodservice deleteService) {
		this.deleteService = deleteService;
	}


	public void setDeletedClass(Class deletedClass) {
		this.deletedClass = deletedClass;
	}

	public String[] getId() {
		return id;
	}

	public void setId(String[] id) {
		this.id = id;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}


	public void setIdClass(Class idClass) {
		this.idClass = idClass;
	}

}
